home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
tex
/
wp2latex.zip
/
WP2LATEX.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-03-06
|
52KB
|
1,977 lines
Program WordPerfect_to_LaTeX;
{ Version 1.0
Date 27-1-1990
}
{$R+} { Range check error }
Uses Crt; { Clearscreen }
Type Bin = file of byte;
Var
wpd_fn,
strip_fn,
tabel_fn,
latex_fn : String;
wpd,
tabel : Bin;
strip,
latex : Text;
num_of_lines_stripfile : Word;
open_com,
close_com : Array [$0..$10] of String;
Exitsave : pointer;
Procedure Rd_word(Var f:Bin; Var w:Word);
{ Deze procedure leest een woord uit de opgegeven binaire file. }
Var
b : Byte;
Begin
Read(f,b);
w:=b;
Read(f,b);
w:=w+256*b
End;
Procedure Wr_word(Var f:Bin; w:Word);
{ Deze procedure schrijft een woord in de opgegeven binaire file. }
Var
b : Byte;
Begin
b:=w mod 256;
Write(f,b);
b:=w div 256;
Write(f,b);
End;
Procedure Jump_in_file(Var f:Bin; dis:Longint);
{ Deze procedure springt in een binaire file het aantal opgegeven bytes. }
Var
cur_pos : Longint;
Begin
cur_pos := Filepos(f);
Seek(f,cur_pos+dis);
End;
Procedure Wpd_check;
{ Kontroleert of de opgegeven WP-document wel daadwerkelijk een }
{ WP5.0-document is. }
Var id1,id2,std1,std2,filetype,dmp1,dmp2,dmp3 : Word;
Startdoc, Pointer : Longint;
b:Byte;
Begin
Rd_word(wpd,id1); Rd_word(wpd,id2);
Rd_word(wpd,std1); Rd_word(wpd,std2);
Rd_word(wpd,filetype);
Rd_word(wpd,dmp1); Rd_word(wpd,dmp2); Rd_word(wpd,dmp3);
Startdoc:=std2*65536+std1;
If (id1=$57ff) and (id2=$4350) and
(filetype=$0A01) {and (dmp1=$0) and (dmp2=$0) and (dmp3=$0)}
Then Seek(wpd,startdoc) { Het is een WP5.0-document}
Else RunError($0201) { Het is geen WP5.0-document}
End;
Procedure Filenames;
{ Deze procedure handelt het opgeven van de filenamen af. }
Var
name,
invoer,
wpdef,
latdef,
filename,
ext : String;
l,p : Integer;
Begin
If ParamCount<1
Then wpdef:=''
Else wpdef:=Paramstr(1);
Writeln;
Writeln;
Write('WordPerfect-filename [',wpdef,'] : ');
Readln(invoer);
If invoer=''
Then wpd_fn:=wpdef
Else wpd_fn:=invoer;
If wpd_fn='' { No filename entered }
Then RunError($200);
name:=wpd_fn;
l:=Length(name);
p:=Pos('.',name);
if p=0 then p:=l+1;
filename:=copy(name,1,p-1);
strip_fn:=concat(filename,'.STR');
tabel_fn:=concat(filename,'.TBL');
latdef:=concat(filename,'.TEX');
Write('LaTeX-filename [',latdef,'] : ');
Readln(invoer);
Writeln;
If invoer=''
Then latex_fn:=latdef
Else latex_fn:=invoer;
Assign(wpd,wpd_fn);
Assign(strip,strip_fn);
Assign(tabel,tabel_fn);
Assign(latex,latex_fn);
End;
{$F+}
Procedure Einde_prog;
{ Deze procedure wordt aan het einde van het programma aangeroepen. }
{ Er wordt gekeken of er zich Run-Time error heeft voor gedaan. }
Var
save_ErrorAddr : Pointer;
Begin
Writeln;
ExitProc:=Exitsave;
save_ErrorAddr := ErrorAddr;
ErrorAddr := nil;
If save_ErrorAddr <> nil
Then Case Exitcode of
$0002 : Writeln('File not found.');
$0003 : Writeln('Path not found.');
$0100 : Writeln('Program Error.');
$0200 : Writeln('No filename entered !');
$0201 : Writeln('Not a WordPerfect 5.0 document !');
Else ErrorAddr := save_ErrorAddr;
End
Else Begin
Writeln('Conversion completed.');
Writeln;
End;
Writeln;
End;
{$F-}
Procedure Init_commando;
Begin
Open_com[$0]:='{\LARGE ';
Open_com[$1]:='{\Large ';
Open_com[$2]:='{\large ';
Open_com[$3]:='{\small ';
Open_com[$4]:='{\footnotesize ';
Open_com[$5]:='$^{\rm ';
Open_com[$6]:='$_{\rm ';
Open_com[$7]:='';
Open_com[$8]:='{\it ';
Open_com[$9]:='';
Open_com[$A]:='';
Open_com[$B]:='\underline{\Underline{';
Open_com[$C]:='{\bf ';
Open_com[$D]:='';
Open_com[$E]:='\Underline{';
Open_com[$F]:='{\sc ';
Close_com[$0]:='}';
Close_com[$1]:='}';
Close_com[$2]:='}';
Close_com[$3]:='}';
Close_com[$4]:='}';
Close_com[$5]:='}$';
Close_com[$6]:='}$';
Close_com[$7]:='';
Close_com[$8]:='\/}';
Close_com[$9]:='';
Close_com[$A]:='';
Close_com[$B]:='}}';
Close_com[$C]:='}';
Close_com[$D]:='';
Close_com[$E]:='}';
Close_com[$F]:='}';
End;
{---SLAG1----}
Procedure Convert_first_strike;
{ Dit is de komplete procedure van de eerste slag met zijn eigen proc.'s. }
Var
by : Byte;
wo,
regelnum : Word;
convperc,
i : Integer;
srtdocpos,
fsize,
fpos,
nextdocpos : longint;
lat : Array[$20..$7F] of String[25];
char_set : Array[$80..$FE] of Integer;
char_code : Array[$80..$FE] of Integer;
ext_lat : Array[$80..$FE] of String[25];
leegptr,
openptr : Array [0..1] of Integer;
attr_rij : Array [0..1,0..16] of Byte;
open_attr_rij : Array [0..1] of Boolean;
depth : Integer;
envir,
line_term : Char;
char_on_line,
nomore_valid_tabs,
indenting,
indent_end,
ind_text1,
ind_text2 : Boolean;
ind_leftmargin,
ind_rightmargin : Word;
num_of_tabs,
latex_tabpos : Integer;
tabpos : Array [1..40] of Word;
right_tab,
align_tab,
center_tab : Boolean;
WP_sidemargin : Integer;
Procedure WP_Default;
Var
j : Integer;
Begin
WP_sidemargin := 1200;
tabpos[1]:=$02c5; { 1e WP-tab is kantlijn --> }
For j:=2 to 10
Do tabpos[j]:=tabpos[j-1]+$02c5; { Volgende tabs 1,5 cm }
For j:=11 to 40 { ($02c5 wpu) verder }
Do tabpos[j]:=$FFFF;
num_of_tabs:=10;
End;
Procedure Table_Init;
Begin
lat[$20]:=' '; {Space}
lat[$21]:='!'; {!}
lat[$22]:='"'; {"}
lat[$23]:='\#'; {#}
lat[$24]:='\$'; {dollar}
lat[$25]:='\%'; {%}
lat[$26]:='\&'; {&}
lat[$27]:=''''; {'}
lat[$28]:='('; {(}
lat[$29]:=')'; {)}
lat[$2A]:='*'; {*}
lat[$2B]:='+'; {+}
lat[$2C]:=','; {,}
lat[$2D]:='-'; {-}
lat[$2E]:='.'; {.}
lat[$2F]:='/'; {/}
lat[$30]:='0'; {0}
lat[$31]:='1'; {1}
lat[$32]:='2'; {2}
lat[$33]:='3'; {3}
lat[$34]:='4'; {4}
lat[$35]:='5'; {5}
lat[$36]:='6'; {6}
lat[$37]:='7'; {7}
lat[$38]:='8'; {8}
lat[$39]:='9'; {9}
lat[$3A]:=':'; {:}
lat[$3B]:=';'; {;}
lat[$3C]:='$<$'; {<}
lat[$3D]:='='; {=}
lat[$3E]:='$>$'; {>}
lat[$3F]:='?'; {?}
lat[$40]:='@'; {@}
lat[$41]:='A'; {A}
lat[$42]:='B'; {B}
lat[$43]:='C'; {C}
lat[$44]:='D'; {D}
lat[$45]:='E'; {E}
lat[$46]:='F'; {F}
lat[$47]:='G'; {G}
lat[$48]:='H'; {H}
lat[$49]:='I'; {I}
lat[$4A]:='J'; {J}
lat[$4B]:='K'; {K}
lat[$4C]:='L'; {L}
lat[$4D]:='M';